package com.berchen.offer;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 给定一个数组[2,7,11,15] target=9
 * 找出数组中两个数之和为target的索引下标。
 *
 * 暴力：直接两层循环进行两两相加。
 */
public class TwoSumTest {

    public static int[] twoSum(int[] arr,int target){

        /**
         * 用于存储 目标值减去遍历数组后未找到数据的 被减数
         *
         */
        Map<Integer ,Integer> map=new HashMap<>();

        for (int i =0;i<arr.length;i++){

            int num=target-arr[i];  // target-当前值 =余数  余数是存储在map中的，如果余数在map中匹配到，那么就返回。如果没有匹配到就讲当前值存储在map中（作为下一次的余数匹配）
            if(map.containsKey(num)){

                return new int[]{map.get(num),i};
            }
            map.put(arr[i],i);
        }
        return null;
    }

    public static void main(String[] args){

        int[] arr={2,7,11,15};
        int target=9;

        int[] result = twoSum(arr, target);
        System.out.println(Arrays.toString(result));
    }
}
